//
//  ILGBlockModule.m
//  ILGDemo
//
//  Created by happy on 2020/4/1.
//  Copyright © 2020 Happy. All rights reserved.
//

#import "ILGBlockModule.h"

typedef void(^ILGBlockModuleBlockType)(void);

@implementation ILGBlockModule
{
    ILGBlockModuleBlockType _block;
}

- (instancetype)init
{
    self = [super init];
    if (self) {
//        id __unsafe_unretained obj = self; //使用__weak、__unsafe_unretained均可
        NSArray *ilgArray = [[NSArray alloc] initWithObjects:@"1", nil];
        __weak NSArray *wkArray = ilgArray;
        _block = ^{
            NSLog(@"objc = %@", wkArray); //使用了obj，实际上会捕获self
        };
    }
    return self;
}

- (void)invokeBlock {
//    [self testingCodeOne];

    if (_block) {
        _block();
    }
}

//- (void)dealloc
//{
//    NSLog(@"%s", __func__);
//}


#pragma mark - 测试代码

//- (void)testingCodeOne
//{
//    int age = 1;
//    void (^block1)(void) = ^{
//        NSLog(@"block1");
//    };
//
//    // block2变量默认所有权修饰符为__strong，ARC下将block赋值给__strong指针时，编译器会自动将栈上的block复制到堆上
//    void (^block2)(void) = ^{
//        NSLog(@"block2:%d",age);
//    };
//
//    NSLog(@"%@/%@/%@",[block1 class],[block2 class],[^{
//        NSLog(@"block3:%d",age);
//    } class]);
//
//    /* ARC下输出结果：
//    __NSGlobalBlock__/__NSMallocBlock__/__NSStackBlock__
//     */
//}

@end
